<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // var 声明的变量往往会越域
        // let 声明的变量有严格局部作用域
        {
            var a = 1;
            let b = 2;
        } // 大括号表示一个作用域
        console.log("a=" + a);
        // console.log("b=" + b); // Uncaught ReferenceError: b is not defined


        // var 可以声明多次
        // let 只能声明一次，无法重复声明，即无法使用 var 同时声明一个变量，但是可以赋值
        var a = 3
        var a = 5
        // let b = 1
        let b = 4; // Uncaught SyntaxError: Identifier 'b' has already been declared

        // var 会变量提升
        // let 不存在变量提升
        // 直观感受就是使用var声明的 x 在声明之前就可以使用，而使用let声明的y，在声明之前无法使用
        console.log(x); // undefined
        var x = 1;
        console.log(y); //  Uncaught ReferenceError: Cannot access 'y' before initialization
        let y = 2;
    </script>
</body>

</html>